#ifndef __PATH_STACK_H
#define __PATH_STACK_H

#include <stdbool.h>

typedef char *ElementType; ///< 路径栈的数据类型 char*

/**
 * @brief 路径栈的栈帧定义
 *
 */
typedef struct node
{
    ElementType data;  ///< 数据域
    struct node *next; ///< 指针域
} StackFrame;

/**
 * @brief 路径栈的结构体定义
 *
 */
typedef struct
{
    StackFrame *top; ///< 栈顶指针
} Stack;

/**
 * @brief 创建路径栈
 *
 * @return Stack* 返回路径栈指针
 */
Stack *stack_create();
/**
 * @brief 销毁路径栈
 *
 * @param s 路径栈指针
 */
void stack_destroy(Stack *s);

/**
 * @brief 判断路径栈是否为空
 *
 * @param s 路径栈指针
 * @return bool 是否为空
 *  @retval true 为空
 *  @retval false 不为空
 */
bool is_empty(Stack *s);

/**
 * @brief 新一级目录入栈
 *
 * @param s 路径栈指针
 * @param data 新一级目录
 */
void stack_push(Stack *s, ElementType data);

/**
 * @brief 获取路径栈的栈顶元素
 *
 * @param s 路径栈指针
 * @return ElementType 栈顶元素，即当前目录
 */
ElementType stack_pop(Stack *s);

#endif /* __PATH_STACK_H */
